package br.com.dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.beans.Paciente;

/**
 * Classe de manipulacao de objetos persistidos via JPA
 * Objetos da classe bean Paciente
 */
public class PacienteDAO extends GenericDAO<Paciente> {

	/**
	 * Localiza um paciente persistido pelo nome
	 * @param nome Nome do paciente
	 * @return Objeto persistido
	 */
	public Paciente localizar(String nome) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		Paciente obj = null;

		try {

			t.begin();
			Query query = em.createQuery("from Paciente where nome like :nome");
			query.setParameter("nome", nome);
			obj = (Paciente) query.getSingleResult();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return obj;
	}

	/**
	 * Localiza um paciente persistido por um telefone
	 * @param telefone Telefone do paciente
	 * @return Objeto persistido
	 */
	public Paciente localizarPorTelefone(String telefone) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		Paciente obj = null;

		try {

			t.begin();
			Query query = em.createQuery("from Paciente where telefone like :telefone or "
					                     + "telefoneCom like :telefone or "
					                     + "telefoneCel like :telefone");
			query.setParameter("telefone", telefone);
			obj = (Paciente) query.getSingleResult();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return obj;
	}
}
